package dice.sinanya.system;

import dice.sinanya.entity.EntityDevInfo;
import dice.sinanya.entity.EntityLoginInfo;
import dice.sinanya.entity.EntityReply;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;

import static dice.sinanya.tools.makedata.StringFormatById.stringFormatById;
import static dice.sinanya.windows.imal.HttpGet.sendGet;

/**
 * @author SitaNya
 * 日期: 2019-06-15
 * 电子邮箱: sitanya@qq.com
 * 维护群(QQ): 162279609
 * 有任何问题欢迎咨询
 * 接口说明: .bot回复静态信息
 */
public class MessagesSystem {

    public static String NONE = "";
    public static String SPACE = " ";
    public static boolean isRunning = false;
    public static SimpleDateFormat DATA_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    public static String VERSIONS = "7.18.17.20.12Beta";
    public static HashMap<String, Boolean> switchList = new HashMap<>();
    public static String redisAddress = "r-2ze8k7x0bluc5makrypd.redis.rds.aliyuncs.com";

    public static ArrayList<String> UPDATE = new ArrayList<String>() {{
        add("更新日志:");
        add("2020年09月19日 增加reply项目，使组回复允许附带标签公共=“是”，只有包含此标签的项目才会进入reply市场。从reply市场拿取的标签会自带编写者");
        add("2020年09月19日 增加reply项目，允许使用\n进行换行\t进行tab和\r进行分段");
        add("2020年09月18日 可能修补了日志报错循环打印的问题");
        add("2020年09月17日 增加了虽然做出来但并没有看懂的双重十字规则");
        add("2020年09月16日 随api组件更新");
        add("2020年09月13日 随api组件更新");
        add("2020年09月04日 随api组件更新");
        add("2020年09月02日 进一步提升稳定性");
        add("2020年09月01日 修正秘密团功能的一个缺失");
        add("2020年09月01日 增加monter get功能");
        add("2020年09月01日 log group增加一个取日志的提示");
        add("2020年09月01日 尝试解决st时为null的问题");
        add("2020年08月27日 ri的骰点上线使用set的默认骰值");
        add("2020年08月27日 增加reply功能");
        add("2020年08月24日 增加增加日志界面");
        add("2020年08月02日 解决了mirai版私聊可能发不出去的问题");
        add("2020年07月31日 避免了log group list取值时取到无关群的日志而引发隐私问题");
        add("2020年07月30日 调整连接池");
        add("2020年07月29日 稳定");
        add("2020年07月27日 开发者成员中增加七月");
        add("2020年07月27日 修补一个log group的问题");
        add("2020年07月26日 修补des命令前面多一个空格的问题");
        add("2020年07月25日 测试组均未发现问题");
        add("2020年07月25日 修补自定义语句\\n识别的问题");
        add("2020年07月23日 优化rank抢占功能的效果");
        add("2020年07月23日 增加一个新功能，允许使用.des录入场景，此词条不跟随群，仅录入者自己可用");
        add("2020年07月22日 在原有的%s指代参数基础上，增加允许使用{数字}调整位置的操作");
        add("2020年07月21日 增加了100余项可自定义内容，均可通过simple开关单群关闭");
        add("2020年07月06日 为rd加了一项功能，允许在连续10次以上骰掷时统计结果");
        add("2020年06月26日 使用sqlite存储部分元数据信息，为日后框架做基础");
        add("2020年06月26日 解决登陆时的设备问题");
        add("2020年06月26日 解决自动退群的问题，暂时关闭自动清群功能");
        add("2020年06月26日 解决私聊长信息的问题");
        add("2020年06月25日 允许使用.log group 功能同时取多个群的日志");
        add("2020年06月25日 解决了deck某个文件中存在大量错误时会卡住的问题");
        add("2020年06月25日 制作了一个发卡命令，允许kp把自己录入的卡发给pl，或是pl之间分发卡片");
        add("2020年05月28日 稳定");
        add("2020年05月25日 允许用户自行更换更新源");
        add("2020年05月25日 sc支持|语法分割多种配置词");
        add("2020年05月25日 支持使用命令代替界面进行设置");
        add("2020年05月25日 npc与monster允许私聊导入，会自动导入使用了.kp的群内");
        add("2020年05月23日 允许使用命令行对配置进行更改");
        add("2020年05月20日 增加team rename功能，使用team中记录的用户名对群中成员进行改名");
        add("2020年05月20日 增加秘密团开关，允许所有骰点结果私聊kp");
        add("2020年05月19日 增加战锤骰点");
        add("2020年05月19日 clue会反馈收到线索");
        add("2020年05月19日 team会显示敏捷值，并自动排序");
        add("2020年05月19日 稳定");
        add("2020年05月16日 rh修补判定机制不可用的问题");
        add("2020年05月16日 日志增加时间戳");
        add("2020年05月16日 增加了骰子不在通知群的清理机制");
        add("2020年05月15日 稳定");
        add("2020年05月12日 升级了API版本");
        add("2020年05月12日 增加了answer回复功能，用于骰主向send提交者回复信息");
        add("2020年05月11日 排除多人物卡问题");
        add("2020年05月11日 增加了自动更新的能力");
        add("2020年05月11日 重做日志记录功能");
        add("2020年05月10日 补全帮助手册");
        add("2020年05月10日 解决.r骰掷出现null的问题");
        add("2020年05月10日 稳定beta");
        add("2020年05月7日 降低锁卡对sc、ra的影响强度");
        add("2020年05月6日 修改抢占逻辑");
        add("2020年05月5日 避免超时清理退出通知群");
        add("2020年05月5日 ban check会显示master");
        add("2020年05月5日 让人物卡锁不影响.ra 角色:技能 机制");
        add("2020年05月5日 强制所有手动黑名单都在公告群中发送一次");
        add("2020年05月5日 增加了一个admin ban命令，在退出时拉黑，只可用于群");
        add("2020年05月4日 牌堆文件安装卸载修改为只有master可以使用");
        add("2020年05月4日 牌堆文件支持命令安装卸载");
        add("2020年05月4日 支持了使用命令更新到预览版本，并与普通更新分开");
        add("2020年05月4日 支持了使用命令更新和使用命令重启");
        add("2020年05月3日 增加了逗号开头的额外识别");
        add("2020年05月3日 允许牌堆热删除");
        add("2020年05月1日 安装目录支持中文");
        add("2020年05月1日 调整了启动流程，尽可能减少了各种起不来的情况");
        add("2020年04月26日 调整了monster和npc列表的回复词");
        add("2020年04月26日 调整了redis连接池设置");
        add("2020年04月26日 允许自定义rd的回复前缀");
        add("2020年04月25日 增加了牌堆文件出错时的弹窗告警");
        add("2020年04月25日 新增了npc和monster列表，协助kp管理怪物情况");
        add("2020年04月25日 改变了心跳连接机制架构，此功能预计6.X重新上线");
        add("2020年04月23日 .r回显错误问题修复（不影响.rd）");
        add("2020年04月20日 属性值支持负值");
        add("2020年04月20日 welcome如果包含at但不包含自己，则不回复");
        add("2020年04月20日 确认稳定");
        add("2020年04月19日 优化窗口界面显示");
        add("2020年04月17日 修DECK的问题");
        add("2020年04月15日 添加只读实例的使用");
        add("2020年04月13日 允许在.r骰掷时直接使用db字符");
        add("2020年04月13日 修复了clock卡死的问题");
        add("2020年04月13日 增加了deck的一个关键字***（数字）***，可以将此条目重复（数字）次");
        add("2020年04月13日 增加了deck的一个关键字【name】，可以调用当前骰掷者昵称");
        add("2020年04月08日 优化数据库刷写的间隔，避免峰值");
        add("2020年04月03日 修复一个可能导致私聊ra等级判断错误的问题");
        add("2020年03月26日 优化了人物卡生成的文本");
        add("2020年03月26日 对mysql连接方式做了一些额外修缮");
        add("2020年03月23日 尝试优化效率");
        add("2020年03月23日 抢占的压力还是有些大，重新调整");
        add("2020年03月20日 固化稳定");
        add("2020年03月13日 加了一个挑选职业用的小工具");
        add("2020年03月13日 增加了群公告审核的功能");
        add("2020年03月12日 修复抢占与welcome功能");
        add("2020年03月12日 增加sender和admin的回复词");
        add("2020年03月10日 修复一个RB、RP对技能值检定的bug，不影响rb、rp核心算法");
        add("2020年03月8日 DND的5e战利品支持");
        add("2020年03月8日 DND的PF查询支持");
        add("2020年03月6日 尝试修复init的一个bug");
        add("2020年03月6日 welcome的open和close报错修复");
        add("2020年03月6日 入群时增加一项检测管理员是否在黑名单内并预防性退群的功能");
        add("2020年03月6日 敏捷没有调整值的ri不会记录到先攻里，修复");
        add("2020年03月2日 .bot新增最新版本号显示");
        add("2020年03月2日 修缮welcome中的bug");
        add("2020年03月1日 微调手册中文本内容");
        add("2020年03月1日 新增用户使用手册，需要单独执行");
        add("2020年03月1日 动态redis地址，以免以后变更影响到老版本");
        add("2020年03月1日 welcome支持at单独关闭或开启");
        add("2020年02月29日 人物卡中间有空格的情况可以识别了");
        add("2020年02月29日 deck和路径中文现在会弹出报错了");
        add("2020年02月27日 改善RB与RP的技能识别方式");
        add("2020年02月27日 更新3r速查");
        add("2020年02月27日 更新5e速查");
        add("2020年02月27日 录入战锤速查");
        add("2020年02月27日 修缮抢占");
        add("2020年02月27日 修缮抢占");
        add("2020年02月25日 修缮抢占");
        add("2020年02月24日 新版抢占功能开发测试完毕");
        add("2020年02月24日 尝试解决技术栈改变抢占机制");
        add("2020年02月23日 尝试解决抢占模式导致的高占用");
        add("2020年02月23日 管理群强制开启抢占");
        add("2020年02月23日 修复了群内关闭group rank时未能退出抢占位置的问题");
        add("2020年02月22日 抢占功能增加群开关与界面开关");
        add("2020年02月22日 应月上要求加一个定时器");
        add("2020年02月22日 抢占功能新加一个逻辑:若本骰开启并发现远端抢占骰版本低于我，则更换抢占");
        add("2020年02月22日 支持了team锁定人物卡");
        add("2020年02月22日 支持了人物卡录入物品");
        add("2020年02月22日 修改抢占的几个BUG");
        add("2020年02月22日 新增抢占功能，允许同一个群中多个骰子同时开启时，只有一个生效");
        add("2020年02月21日 修复rc的大失败判定逻辑有误的bug");
        add("2020年02月21日 修复一个ri在不加参数是无法使用的bug");
        add("2020年02月18日 在team控制san时，不再会给命令发起者增加新人物卡");
        add("2020年02月18日 dnd的3ry查询私聊时不再发送");
        add("2020年02月18日 ra和rc用规则书的情况写反了，修复");
        add("2020年02月14日 dnd的3ry查询同时发送群与私聊，避免吞消息");
        add("2020年02月14日 .nn现在不会消除自定义卡的当前数据了");
        add("2020年02月14日 多人物卡支持了.st rename改名，若当前卡是多人物卡，则直接改名。若当前卡是自定义卡，则自动生成一张多人物卡");
        add("2020年02月14日 多人物卡支持了.st lock与.st unlock的锁定，允许玩家在某个固定群锁定当前人物卡，不会受到其余群切卡的影响");
        add("2020年02月14日 DND先攻优势与先攻劣势");
        add("2020年02月13日 修复team增加san时后续人会变成降低san的问题");
        add("2020年02月13日 自动将所有全角字符转化为半角字符");
        add("2020年02月13日 更改3ry的关键字识别方式");
        add("2020年02月13日 更改3ry的检索方式");
        add("2020年02月12日 stc修改hp与san时会自动计算最大值与最小值了");
        add("2020年02月12日 修改ob exit不起效的问题");
        add("2020年02月9日 增加dnd的3ry和5ey归并查询");
        add("2020年02月9日 无限团命令中加h字符可以变为暗骰了");
        add("2020年02月9日 可使用.algo set调节随机算法了");
        add("2020年02月8日 调整向火独行模块中的数个细节");
        add("2020年02月8日 增加.rule set与.rule get设定房规区间");
        add("2020年02月8日 增加.st show命令后可以接技能查询单个技能值");
        add("2020年02月8日 调整云黑策略，现在只有填写master，并且master和骰子均在群162279609中时，才可以手工录入云黑");
        add("2020年02月8日 rp、rb、sc自动根据之前的骰点进行切换");
        add("2020年02月8日 解决了有时候拉黑退群没能退出去的问题");
        add("2020年02月8日 增加了.st get命令，只输出人物属性和所有非默认技能");
        add("2020年02月8日 自定义查询条目录入模块");
        add("2020年02月8日 send命令用于反馈问题");
        add("2020年02月8日 更换了人物卡链接");
        add("2020年02月7日 避免JRRP占用过高");
        add("2020年01月29日 尝试排查log没录上的问题");
        add("2020年01月29日 更新API版本");
        add("2020年01月28日 修复admin指令退群失败的问题");
        add("2020年01月25日 下调默认方法的优先级");
        add("2020年01月23日 尝试对.r方法中不识别空格分隔的问题进行修复");
        add("2020年01月23日 修复groupSearch命令无法私聊使用的问题");
        add("2020年01月23日 增加ra骰掷可以支持#号识别并骰掷多次的方式");
        add("2020年01月20日 优化log记录和获取方法");
        add("2020年01月20日 自定义角色卡栏位的名称可以固化了");
        add("2020年01月20日 解决了一个可能导致强制更新亮起的问题");
        add("2020年01月20日 kp描述的开始结束语支持大小写了");
        add("2020年01月20日 增加一个.st clr命令用于清空并回到自定义栏位");
        add("2020年01月20日 支持录入时使用--分割和全角分割。支持录入时存在tab、空格、换行");
        add("2020年01月20日 修复log未开启的bug");
        add("2020年01月20日 尝试解决log长时间不使用会无法记录的bug");
        add("2020年01月20日 解决一个黑名单录入的bug");
        add("2020年01月19日 增加了一个小功能，log开启时，输入s或o，会提示kp正在输入或kp已描述完毕，避免大家插嘴");
        add("2020年01月18日 修复了切换角色可能引发的bug");
        add("2020年01月17日 解决一个因讨论组而导致的报错");
        add("2020年01月16日 增加通报群修改页面，允许将黑名单、加群等通告发至自定义群，目前仅允许写一个");
        add("2020年01月16日 修复加入群有时会被认为是讨论组的问题");
        add("2020年01月16日 修复加入群时不通报的问题");
        add("2020年01月16日 修复被踢出后有时不会拉黑的问题");
        add("2020年01月16日 修复偶尔会丢人物卡数据的问题");
        add("2020年01月09日 新增暗骰支持%s指代某人群昵称的功能");
        add("2020年01月05日 ob开关与deck开关设置错误，修复");
        add("2020年01月05日 支持新的启动方式");
        add("2020年01月03日 修复无法删除黑名单的问题");
        add("2020年01月03日 修复群数量显示错误的问题");
        add("2020年01月03日 修复log重复开启不报错的问题");
        add("2020年01月03日 修复加好友有时不回复的问题");
        add("2020年01月03日 修复讨论组关闭命令不生效的问题");
        add("2020年01月03日 修复team不识别at的问题");
        add("2019年12月29日 日志过大时不再生成docx染色文件");
        add("2019年12月29日 .nn命令私聊问题修复");
        add("2019年12月29日 init的rm命令忽略输入大小写");
        add("2019年12月29日 增加一种设定方式，当当前已选择人物卡，且输入条数较少时，只更新当前人物卡");
        add("2019年12月29日 减少.man命令时的误触发几率");
        add("2019年12月29日 增加welcome设置时，如果at其它骰子则不响应的设置");
        add("2019年12月29日 恢复对禁言检测的支持");
        add("2019年12月16日 支持了.r命令中的q参数，和k取大相反，q用来取小。一般应用于dnd的劣势判定中，使用方式和k参数相同");
        add("2019年12月16日 支持了.nn命令，和.st命令一样用于切换人物卡。当不填写任何参数时会生成一张随机姓名的临时任务卡");
        add("2019年12月16日 dnd的先攻列表支持了增删改查，详情参见.man init rm和.man init set");
        add("2019年12月16日 dnd的先攻列表支持了后置标号，如.ri 地精1和.ri 地精2。并且不影响前面的加值");
        add("2019年12月16日 sc最后可以不填写数值而填写你的其它角色卡名称，并以此对其它角色卡进行sancheck");
        add("2019年12月16日 ra、rc、rb、rp、rav、rcv在技能检定时可以使用[角色名:技能名]对你的其它角色卡的技能进行检定了");
        add("2019年12月15日 team小队功能添加all字符，允许对小队所有成员进行操作");
        add("2019年12月06日 魔都模组查询器");
        add("2019年10月17日 向火独行");
        add("2019年10月17日 修复更换骰子后log可能无法打开的问题");
        add("2019年10月17日 支持stc命令修改当前人物卡属性");
        add("2019年10月17日 支持非常用技能固化");
        add("2019年10月17日 增加了3r特质和法术大圈");
        add("2019年10月17日 增加了rule的查询范围");
        add("2019年10月17日 增加3r的寒霜法术");
        add("2019年10月17日 增加黑名单历史查询");
        add("2019年10月09日 优化染色机制");
        add("2019年10月09日 应UUZ要求，所有界面的保存按钮均改为全局保存");
        add("2019年10月09日 支持了群检索、查询");
        add("2019年10月08日 白名单用户拉群，自动添加白名单群");
        add("2019年10月07日 修改了coc人物卡做成的格式");
        add("2019年10月07日 修复了入群黑名单检测的bug");
        add("2019年10月07日 修复了入群黑名单检测的bug");
        add("2019年10月06日 修改了人物卡默认取得的昵称");
        add("2019年10月06日 修正fate支持四则混合运算");
        add("2019年10月06日 修改了黑名单入群的监测机制");
        add("2019年10月06日 增加骰池允许自定义面数");
        add("2019年10月01日 允许master设置多个");
        add("2019年09月30日 骰池增加5000次上线");
        add("2019年09月30日 允许自行追加help命令的尾部");
        add("2019年09月29日 支持了命运团骰点");
        add("2019年09月29日 支持了无限团骰池");
        add("2019年09月29日 优化了help文本，增加了man命令以查询命令详细用法");
        add("2019年09月29日 优化了NPC命令的流程");
        add("2019年09月26日 增加了dnd状态速查");
        add("2019年09月21日 在退群时一并删除群开关记录");
        add("2019年09月20日 修改了自定义回复语偶尔会带有多个换行和空格的问题");
        add("2019年09月18日 修了有关黑白名单的小bug");
        add("2019年09月16日 改回了对象存储的获取模式");
        add("2019年09月13日 黑名单支持日期时间");
        add("2019年09月13日 支持移除shiki处同步来的白名单，管理人为UUZ:2694900224");
        add("2019年09月13日 修复role的报错");
        add("2019年09月13日 修复sc中的一个bug");
        add("2019年09月13日 修改cos更新使用方式");
        add("2019年09月12日 重做log染色机制");
        add("2019年09月12日 修复分群开关的一个严重bug");
        add("2019年09月11日 支持传统st导入方式");
        add("2019年09月11日 支持ob旁观");
        add("2019年09月11日 3r法术查询");
        add("2019年09月11日 分群管理开关");
        add("2019年09月11日 休假模式开关");
        add("2019年09月11日 公有模式开关");
        add("2019年09月11日 为分群管控做准备");
        add("2019年09月10日 更换了高可用的mysql集群和升级用的对象存储");
        add("2019年08月29日 黑名单可以添加原因了");
        add("2019年08月29日 deck支持了骰点内置");
        add("2019年08月29日 deck牌堆修复连续嵌套的问题");
        add("2019年08月28日 增加deck help命令");
        add("2019年08月28日 增加deck牌堆及其市场支持");
        add("2019年08月28日 增加白名单用户、群组的可选项支持");
        add("2019年08月22日 增加了JRRP、WELCOME、NAME功能的可选项支持");
        add("2019年08月22日 紧急解决被禁言识别问题");
        add("2019年08月21日 增加更新界面");
        add("2019年08月20日 修改多重投掷的显示方式");
        add("2019年08月20日 增加rp允许多重投掷");
        add("2019年08月20日 增加dnd法术查询");
        add("2019年08月20日 增加admin命令用于远程关闭、开启、退出");
        add("2019年08月20日 调整开关识别范围");
        add("2019年08月14日 增加频度检测");
        add("2019年08月14日 换用JCQ");
        add("2019年08月14日 增加界面");
        add("2019年08月09日 增加配置文件云黑开关");
        add("2019年08月09日 增加心跳连接");
        add("2019年08月08日 支持云黑名单");
        add("2019年08月07日 支持了规则查询rule命令，感谢夏浅秋、秃了秃了的支持");
    }};


    public static StringBuilder STR_BOT_VERSIONS = new StringBuilder()
            .append("Dice made in java\n")
            .append("By SitaNya\n")
            .append("当前版本号为:\t")
            .append(VERSIONS)
            .append("\n最新版本号为:\t")
            .append("%s")
            .append("\n项目文档:\thttps://sinanya.com/#/")
            .append("\n交流及BUG反馈群:\t162279609")
            .append("\n交流反馈论坛（请勿讨论非开发相关话题）:\thttps://sinanya.com/discuz/forum.php")
            .append("\n反馈问题命令请参阅.man send的说明")
            .append("\n对塔骰进行投喂，帮助塔骰走的更远:https://afdian.net/@sitanya233");

    public static StringBuilder STR_BOT_HELP = new StringBuilder()
            .append("下载用户手册（手机端下载型链接可能报告不安全，请无视）:https://dice-new-1256090486.file.myqcloud.com/%E5%A1%94%E9%AA%B0%E7%94%A8%E6%88%B7%E6%89%8B%E5%86%8C.pdf\n")
            .append("命令索引:\n")
            .append(".bot\t\t")
            .append("查看骰子版本信息\n")
            .append(".bot on\t\t")
            .append("开启骰子\n")
            .append(".bot off\t\t")
            .append("关闭骰子\n")
            .append(".bot exit\t\t")
            .append("命令骰子主动退群")
            .append("\n-----------------------------------------------\n")
            .append(".help normal\t\t")
            .append("常规骰点命令\n")
            .append(".help book\t\t")
            .append("资料集命令\n")
            .append(".help make\t\t")
            .append("人物卡命令\n")
            .append(".help group\t\t")
            .append("带团命令\n")
            .append(".help dnd\t\t")
            .append("DND命令\n")
            .append(".help master\t\t")
            .append("骰主命令\n")
            .append(".help manager\t\t")
            .append("群管理员命令\n")
            .append(".help game\t\t")
            .append("娱乐、额外模块\n")
            .append(".help other\t\t")
            .append("其他规则下命令,如无限、命运等");

    public static StringBuilder STR_BOT_INFO = new StringBuilder()
            .append(stringFormatById(STR_BOT_VERSIONS.toString(), sendGet("https://dice-6-1256090486.file.myqcloud.com/version")))
            .append("\n\n")
            .append(STR_BOT_HELP);

    public static EntityLoginInfo loginInfo = new EntityLoginInfo();
    public static HashMap<String, Object> entityDevice = new HashMap<String, Object>();
    public static ArrayList<String> useCustomRule = new ArrayList<>();

    public static EntityDevInfo devInfo = new EntityDevInfo();
    public static HashMap<String, ArrayList<EntityReply>> replyMap = new HashMap<>();
    public static HashMap<Long, HashMap<String, ArrayList<EntityReply>>> AllReply = new HashMap<>();
}
